home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
ident
/
patches
/
sendmail-5.65c+IDA-1.4.4.1-ident.patch
< prev
next >
Wrap
Text File
|
1992-08-20
|
7KB
|
255 lines
*** conf.h.orig Tue Mar 31 16:00:07 1992
--- conf.h Tue Mar 31 16:01:40 1992
***************
*** 92,97 ****
--- 92,98 ----
# define NAMED_BIND 1 /* use Berkeley Internet Domain Server */
/*# define TTYNAME 1 /* set macro y to basename of tty device */
/*# define NOTUNIX 1 /* Define if msgs lack a UNIX "From " line */
+ #define AUTHUSER 1 /* Define to support the 'ident' protocol */
/*
* Enable non-standard SMTP mods for talking to the DEC mail11v3 program.
*** sendmail.h.orig Tue Jul 28 04:34:20 1992
--- sendmail.h Tue Jul 28 04:35:57 1992
***************
*** 713,718 ****
--- 713,719 ----
EXTERN char *QueueDir; /* location of queue directory */
EXTERN char *FileName; /* name to print on error messages */
EXTERN char *SmtpPhase; /* current phase in SMTP processing */
+ EXTERN char *RealUser; /* name of user we're talking to (RFC931) */
EXTERN char *MyHostName; /* name of this host for SMTP messages */
EXTERN char *RealHostName; /* name of host we are talking to */
EXTERN char *DeclHostName; /* declared name of host we are talking to */
*** deliver.c.orig Tue Mar 31 15:55:01 1992
--- deliver.c Tue Mar 31 15:55:26 1992
***************
*** 225,230 ****
--- 225,240 ----
define('g', tfrombuf, e); /* translated sender address */
define('h', host, e); /* to host */
+
+ #ifdef AUTHUSER
+ if (RealHostName)
+ define('S', RealHostName, CurEnv);
+
+ /* RFC 931 sender name---2/7/91 DJB */
+ if (RealUser)
+ define('F', RealUser, CurEnv);
+ #endif
+
Errors = 0;
pvp = pv;
*pvp++ = m->m_argv[0];
*** envelope.c.orig Tue Mar 31 15:55:01 1992
--- envelope.c Tue Mar 31 15:55:26 1992
***************
*** 476,482 ****
--- 476,497 ----
#ifdef LOG
if (LogLevel >= 1)
if (realname == from && RealHostName != NULL)
+ #ifdef AUTHUSER
syslog(LOG_NOTICE,
+ "from=%s unparseable, received from %s%s%s",
+ from,
+ RealUser ? RealUser : "",
+ RealUser ? "@" : "",
+ RealHostName);
+ else
+ syslog(LOG_NOTICE,
+ "Unparseable username %s wants from=%s",
+ realname,
+ RealUser ? RealUser : "",
+ RealUser ? "@" : "",
+ from);
+ #else /* !AUTHUSER */
+ syslog(LOG_NOTICE,
"from=%s unparseable, received from %s",
from, RealHostName);
else
***************
*** 483,488 ****
--- 498,504 ----
syslog(LOG_NOTICE,
"Unparseable username %s wants from=%s",
realname, from);
+ #endif /* !AUTHUSER */
#endif /* LOG */
}
from = newstr(realname);
*** headers.c.orig Tue Mar 31 15:55:01 1992
--- headers.c Tue Mar 31 15:55:26 1992
***************
*** 477,486 ****
--- 477,496 ----
else
(void)sprintf(hbuf, "%.90s (%s)",
RealHostName, inet_ntoa(RealHostAddr.sin_addr));
+ #ifdef AUTHUSER
syslog(LOG_INFO,
+ "%s: from=%s, size=%ld, class=%d, received from %s%s%s\n",
+ CurEnv->e_id, CurEnv->e_from.q_paddr, CurEnv->e_msgsize,
+ CurEnv->e_class,
+ RealUser ? RealUser : "",
+ RealUser ? "@" : "",
+ name);
+ #else
+ syslog(LOG_INFO,
"%s: from=%s, size=%ld, class=%d, received from %s",
CurEnv->e_id, CurEnv->e_from.q_paddr, CurEnv->e_msgsize,
CurEnv->e_class, name);
+ #endif /* !AUTHUSER */
}
#endif /* LOG */
}
*** main.c.orig Tue Mar 31 15:55:01 1992
--- main.c Tue Mar 31 15:55:27 1992
***************
*** 48,53 ****
--- 48,59 ----
# define MAXHOSTNAMELEN 64
#endif /* !MAXHOSTNAMELEN */
+ #ifdef AUTHUSER
+ #include <netdb.h>
+ #include <errno.h>
+ #include <pwd.h>
+ #endif
+
#ifdef lint
int edata, end;
#endif /* lint */
***************
*** 876,881 ****
--- 882,988 ----
#endif /* DAEMON */
}
+ #ifdef AUTHUSER
+ {
+ extern int auth_fd2();
+ extern char *auth_tcpuser3();
+
+ unsigned long inlocal;
+ unsigned long inremote;
+ unsigned short local;
+ unsigned short remote;
+ char *user;
+
+
+ /* RFC 931 support added 2/7/91 by DJB */
+ /* We could just use auth_xline but we don't */
+ /* know the supposed username yet. */
+
+ if (InChannel == NULL)
+ user = NULL;
+ else if (auth_fd2(fileno(InChannel),
+ &inlocal, &inremote,
+ &local, &remote) != -1)
+ {
+ /* 30 second timeout added by pen@lysator.liu.se */
+ user = auth_tcpuser3(inlocal, inremote, local, remote, 30);
+ if (!user)
+ user = NULL;
+ }
+ else
+ {
+ if (errno != ENOTSOCK)
+ user = NULL;
+ else
+ {
+ struct passwd *pwd;
+
+ pwd = getpwuid(getuid());
+ if (!pwd)
+ user = NULL;
+ else
+ user = pwd->pw_name;
+ }
+ }
+
+ if (user)
+ RealUser = newstr(user);
+ else
+ RealUser = NULL;
+ }
+
+ if (RealHostName == NULL)
+ {
+ int len = sizeof(RealHostAddr);
+ struct hostent *hp, *gethostbyaddr();
+ char buf[200];
+
+
+ if (InChannel &&
+ getpeername(fileno(InChannel), &RealHostAddr, &len) != -1 &&
+ RealHostAddr.sin_family == AF_INET)
+ {
+ /* determine host name */
+ hp = gethostbyaddr((char *) &RealHostAddr.sin_addr,
+ sizeof RealHostAddr.sin_addr, AF_INET);
+ if (hp != NULL)
+ (void) strcpy(buf, hp->h_name);
+ else
+ {
+ extern char *inet_ntoa();
+
+ /* produce a dotted quad */
+ (void) sprintf(buf, "[%s]",
+ inet_ntoa(RealHostAddr.sin_addr));
+ }
+
+ RealHostName = newstr(buf);
+ }
+ else
+ if (InChannel && errno == ENOTSOCK)
+ {
+ char hname[256];
+
+ /* determine host name */
+ if (gethostname(hname, sizeof(hname)-1) != -1)
+ {
+ hp = gethostbyname(hname);
+ if (hp != NULL)
+ (void) strcpy(buf, hp->h_name);
+ else
+ {
+ extern char *inet_ntoa();
+
+ /* produce a dotted quad */
+ (void) sprintf(buf, "[%s]",
+ inet_ntoa(RealHostAddr.sin_addr));
+ }
+
+ RealHostName = newstr(buf);
+ }
+ }
+ }
+ #endif /* AUTHUSER */
+
#ifdef SMTP
/*
** If running SMTP protocol, start collecting and executing
*** srvrsmtp.c.orig Tue Mar 31 15:55:01 1992
--- srvrsmtp.c Tue Mar 31 15:55:27 1992
***************
*** 272,277 ****
--- 272,285 ----
break;
define('s', sendinghost, CurEnv);
define('r', "SMTP", CurEnv);
+ #ifdef AUTHUSER
+ /* I want the _real_ hostname too.. */
+ if (RealHostName)
+ define('S', RealHostName, CurEnv);
+ /* RFC 931 sender name---2/7/91 DJB */
+ if (RealUser)
+ define('F', RealUser, CurEnv);
+ #endif
initsys();
setproctitle("%s %s: %s", CurEnv->e_id,
CurHostName, inp);